home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / xbmconv / xbmconv.bas < prev    next >
BASIC Source File  |  1993-07-08  |  7KB  |  236 lines

  1. 10000 '拡張子を .BMP から .XBM に変更
  2. 10010 'データを大文字から小文字に変更(xvなどに対応) 
  3. 10020 '               <<<<<  XBM CONVERTER Ver2.0  >>>>>
  4. 10030 '                   1992,1993  STUDIO MU PRESENTS
  5. 10040 '            Programmed by  Gandalf of the Valley of Wind
  6. 10050 '
  7. 10060 SCREEN @0:COLOR 7,0:WIDTH 80,25:CONSOLE 22,3,0:CLS
  8. 10070 ON ERROR GOTO *TRAPERR
  9. 10080 '
  10. 10090 WID=320                        '幅
  11. 10100 HEIGHT=240                     '高さ
  12. 10110 PATH$=".\"                     'パス名
  13. 10120 F$=""                          'ファイル名
  14. 10130 XBM_MADE=0                     'XBMを作成したら-1 ELSE 0
  15. 10140 XBM_OLD=0                      '新しい画像をロードしたら-1 ELSE 0
  16. 10150 '
  17. 10160 DIM PAT$(38400),WIN%(12960)
  18. 10170 GOSUB *BOX
  19. 10180 '
  20. 10190 *MENU
  21. 10200 GET@A(0,400)-(639,479),WIN%
  22. 10210 LINE(0,400)-(639,479),PRESET,,BF
  23. 10220 LOCATE 0,24:PRINT USING"SIZE X=### / Y=###";WID,HEIGHT;
  24. 10230 PRINT "    PATH=";PATH$;
  25. 10240 PRINT "    FILENAME=";F$;
  26. 10250 'IF F$<>"" THEN PRINT "    FILENAME=";F$;
  27. 10260 IF XBM_MADE THEN PRINT"    《XBM有り》" ELSE PRINT
  28. 10270 PRINT"COMMAND ?";
  29. 10280 BEEP:CMD=VAL(INPUT$(1))
  30. 10290 IF 1<=CMD AND CMD<=7 THEN 10370
  31. 10300 PRINT
  32. 10310   PRINT"  1:TIF ロード  2:XBM ロード  3:TIF セーブ  4:XBM セーブ"
  33. 10320   PRINT"  5:画像反転    6:サイズ設定  7:XBM 作成"
  34. 10330   LOCATE 65,24:COLOR 15:PRINT"HIT ANY KEY";
  35. 10340   A$=INPUT$(1):COLOR 7:PRINT
  36. 10350   GOTO 10220
  37. 10360 '
  38. 10370 PRINT CMD;":";
  39. 10380 ON CMD GOSUB *TIFLOAD,*XBMLOAD,*TIFSAVE,*XBMSAVE,                                        *REVERSE,*SIZE,*XBMGEN
  40. 10390 GOTO *MENU
  41. 10400 '
  42. 10410 *TIFLOAD
  43. 10420 PRINT"TIF ロード"
  44. 10430 GOSUB *FILENAME_IN
  45. 10440 '
  46. 10450 GOSUB *SURE:IF A$="N" THEN RETURN
  47. 10460 GOSUB *BOX
  48. 10470 LOAD@ PATH$+F$+".TIF"
  49. 10480 GOSUB *BOX
  50. 10490 XBM_OLD=-1
  51. 10500 RETURN
  52. 10510 '
  53. 10520 *XBMLOAD
  54. 10530 PRINT"XBM ロード"
  55. 10540 GOSUB *FILENAME_IN
  56. 10550 '
  57. 10560 GOSUB *SURE:IF A$="N" THEN RETURN
  58. 10570 GOSUB *BOX
  59. 10580 OPEN "I",#1,PATH$+F$+".XBM"
  60. 10590 INPUT #1,A$
  61. 10600 IF INSTR(A$,"#define")=0 THEN 10590
  62. 10610 XBMX=VAL(MID$(A$,INSTR(A$,"_width")+6)):PRINT XBMX;
  63. 10620 IF XBMX MOD 8>0 THEN XBMX=XBMX+8-(XBMX MOD 8)
  64. 10630 INPUT #1,A$
  65. 10640 IF INSTR(A$,"#define")=0 THEN 10630
  66. 10650 XBMY=VAL(MID$(A$,INSTR(A$,"_height")+7)):PRINT XBMY;
  67. 10660 INPUT #1,A$:IF INSTR(A$,"{")=0 THEN 10660
  68. 10670 '
  69. 10680 W=1:N=0
  70. 10690 FOR Y=1 TO XBMY
  71. 10700   FOR X=1 TO XBMX\8
  72. 10710     INPUT #1,A$
  73. 10720     PAT$(N)=MID$(A$,3)
  74. 10730     N=N+1
  75. 10740     W=W+1:IF W=13 AND EOF(1)=0 THEN INPUT #1,A$:W=1
  76. 10750   NEXT
  77. 10760 NEXT
  78. 10770 '
  79. 10780 N=0
  80. 10790 FOR Y=0 TO XBMY-1
  81. 10800   FOR X=0 TO XBMX-7 STEP 8
  82. 10810     A=VAL("&H"+PAT$(N))
  83. 10820     FOR I=0 TO 7
  84. 10830       IF A MOD 2 THEN PRESET(X+I,Y) ELSE PSET(X+I,Y)
  85. 10840       A=A\2
  86. 10850     NEXT
  87. 10860     N=N+1
  88. 10870   NEXT
  89. 10880 NEXT
  90. 10890 '
  91. 10900 CLOSE #1
  92. 10910 '
  93. 10920 GOSUB *BOX
  94. 10930 XBM_OLD=-1
  95. 10940 RETURN
  96. 10950 '
  97. 10960 *TIFSAVE
  98. 10970 PRINT"TIF セーブ"
  99. 10980 GOSUB *FILENAME_IN
  100. 10990 '
  101. 11000 GOSUB *SURE:IF A$="N" THEN RETURN
  102. 11010 GOSUB *BOX
  103. 11020 SAVE@ PATH$+F$+".TIF",(0,0)-(WID-1,HEIGHT-1)
  104. 11030 GOSUB *BOX
  105. 11040 RETURN
  106. 11050 '
  107. 11060 *XBMSAVE
  108. 11070 PRINT"XBM セーブ"
  109. 11080 IF XBM_MADE=-1 THEN 11100
  110. 11090   PRINT"ビットマップデータが作成されていません。":RETURN 
  111. 11100 IF XBM_OLD=0 THEN 11160
  112. 11110   PRINT"表示されている画像のビットマップデータは作成されていません。"
  113. 11120   PRINT"最後に作成したビットマップデータを出力しますか (Y/N)? ";
  114. 11130   A$=INPUT$(1):PRINT A$
  115. 11140   IF A$="N" OR A$="n" THEN RETURN
  116. 11150 '
  117. 11160 GOSUB *FILENAME_IN
  118. 11170 '
  119. 11180 GOSUB *SURE:IF A$="N" THEN RETURN
  120. 11190 GOSUB *BOX
  121. 11200 OPEN "O",#1,PATH$+F$+".XBM"
  122. 11210 PRINT #1,"#define ";F$;"_width";WID
  123. 11220  'PRINT "#define ";F$;"_width";WID
  124. 11230 PRINT #1,"#define ";F$;"_height";HEIGHT
  125. 11240  'PRINT "#define ";F$;"_height";HEIGHT
  126. 11250 PRINT #1,"static char ";F$;"_bits[] = {"
  127. 11260  'PRINT "static char ";F$;"_bits[] = {"
  128. 11270 I=0
  129. 11280 *LOOP1
  130. 11290   PRINT #1,"   ";
  131. 11300    'PRINT "   ";
  132. 11310 *LOOP2
  133. 11320     PRINT #1,"0x";PAT$(I);
  134. 11330      'PRINT "0x";PAT$(I);
  135. 11340     I=I+1:IF I=N THEN GOTO *FIN
  136. 11350     PRINT #1,",";
  137. 11360      'PRINT ",";
  138. 11370     IF (I MOD 12)<>0 THEN *LOOP2
  139. 11380     PRINT #1,""
  140. 11390       'PRINT
  141. 11400     GOTO *LOOP1
  142. 11410 *FIN
  143. 11420 PRINT #1,"};"
  144. 11430  'PRINT "};"
  145. 11440 CLOSE
  146. 11450 RETURN
  147. 11460 '
  148. 11470 *REVERSE
  149. 11480 PRINT"画像反転"
  150. 11490 PUT@A(0,400)-(639,479),WIN%
  151. 11500 LINE(0,0)-(639,479),XOR,7,BF
  152. 11510 RETURN
  153. 11520 '
  154. 11530 *SIZE
  155. 11540 PRINT "サイズ設定"
  156. 11550 PUT@A(0,400)-(639,479),WIN%
  157. 11560 PRINT"サイズ設定 (←/→/↓/↑ or 4/6/2/8 , END=[RET])"
  158. 11570 '
  159. 11580 CMD=ASC(INPUT$(1))
  160. 11590 GOSUB *BOX
  161. 11600 WID=WID+(CMD=&H1D)*8-(CMD=&H1C)*8+(CMD=&H34)*8-(CMD=&H36)*8
  162. 11610 HEIGHT=HEIGHT+(CMD=&H1E)-(CMD=&H1F)+(CMD=&H38)*8-(CMD=&H32)*8
  163. 11620 WID=WID-(WID<1)*640+(WID>640)*640
  164. 11630 HEIGHT=HEIGHT-(HEIGHT<1)*480+(HEIGHT>480)*480
  165. 11640 GOSUB *BOX
  166. 11650 LOCATE 0,24:PRINT USING"SIZE X=### / Y=###";WID,HEIGHT;
  167. 11660 IF CMD<>13 THEN 11580
  168. 11670 PRINT:PRINT:RETURN
  169. 11680 '
  170. 11690 *XBMGEN
  171. 11700 PRINT"XBM 作成"
  172. 11710 PUT@A(0,400)-(639,479),WIN%
  173. 11720 PRINT"ビットマップを作成します。";
  174. 11730 GOSUB *SURE:IF A$="N" THEN RETURN
  175. 11740 GOSUB *BOX
  176. 11750 N=0
  177. 11760 '
  178. 11770 FOR Y=0 TO HEIGHT-1
  179. 11780   FOR X=0 TO WID-8 STEP 8
  180. 11790     LINE(X,Y)-(X+7,Y),XOR,7
  181. 11800     A=-POINT(X+7,Y)*8-POINT(X+6,Y)*4-POINT(X+5,Y)*2-POINT(X+4,Y)
  182. 11810     B=-POINT(X+3,Y)*8-POINT(X+2,Y)*4-POINT(X+1,Y)*2-POINT(X,Y)
  183. 11820     PAT$(N)=MID$("0123456789abcdef",A+1,1)                                             +MID$("0123456789abcdef",B+1,1)
  184. 11830     N=N+1
  185. 11840   NEXT
  186. 11850 NEXT
  187. 11860 '
  188. 11870 PRINT"変換終了。"
  189. 11880 LINE(0,0)-(WID-1,HEIGHT-1),XOR,7,BF
  190. 11890 GOSUB *BOX
  191. 11900 XBM_MADE=-1:XBM_OLD=0
  192. 11910 RETURN
  193. 11920 '
  194. 11930 '--------------------------------------------------------------------
  195. 11940 '
  196. 11950 *FILENAME_IN
  197. 11960 PRINT "PATHNAME "+PATH$+" -> ";
  198. 11970 LINE INPUT A$
  199. 11980 IF A$<>"" THEN PATH$=A$
  200. 11990 PRINT "FILENAME "+F$+" -> ";
  201. 12000 LINE INPUT A$
  202. 12010 IF A$<>"" THEN F$=A$
  203. 12020 RETURN
  204. 12030 '
  205. 12040 *BOX
  206. 12050 LINE(0,0)-(WID-1,HEIGHT-1),XOR,7,B
  207. 12060 RETURN
  208. 12070 '
  209. 12080 *SURE
  210. 12090 PRINT"よろしいですか (Y/N)? ";
  211. 12100 A$=INPUT$(1):PRINT A$
  212. 12110 IF A$="n" THEN A$="N"
  213. 12120 RETURN
  214. 12130 '
  215. 12140 *TRAPERR
  216. 12150 BEEP
  217. 12160 '
  218. 12170 IF ERR<>64 THEN 12240
  219. 12180   PRINT"ファイルを上書きします。よろしいですか (Y/N)? ";
  220. 12190   A$=INPUT$(1):PRINT A$
  221. 12200   IF A$<>"N" AND A$<>"n" THEN 12220
  222. 12210     PRINT "出力を中止します。":RESUME *MENU
  223. 12220   IF ERL=11020 THEN KILL F$+".TIF":RESUME
  224. 12230   KILL F$+".XBM":RESUME
  225. 12240 IF ERR<>63 THEN 12290
  226. 12250   PRINT"ファイルが見つかりません。"
  227. 12260   GOSUB *BOX
  228. 12270   RESUME *MENU
  229. 12280 '
  230. 12290 IF ERR<>112 THEN 12330
  231. 12300   PRINT"16色モードのデータではありません。"
  232. 12310   RESUME *MENU
  233. 12320 '
  234. 12330 PRINT"エラー";ERR;" / エラー行";ERL
  235. 12340 ON ERROR GOTO 0
  236.